package Logik;

import GUI.Fehler_Ausleihe;
import GUI.Fehler_Rueckgabe;
import Interfaces.Medienverwaltung;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * Klasse die die Ausleih- und Rückgabeprozeduren von Ausleihen/Rückgabe
 * benötigt werden. 
 * @author Tobias Graspointner / Andreas Konsek
 * @version 1.0
 */
public class RueckgabeAusleihe{

    Medienverwaltung mv = new Medienquelle();
    private List<Medium> mdl = new ArrayList<Medium>();
    
    /**
     * Dursucht die Medienliste aus der Datei Medienliste.md nach dem auszuleihenden Medium und
     * ändert den Wert ausgeliehen des Mediums mittels setAusgeliehen(knr) auf die Kundennummer des Ausleihenden.
     * @param artn - Artikelnummer des auszuleihenden Mediums
     * @param knr - Kundennummer des Ausleihers
     * @return Aktualisierte Medienliste
     */
    public List ausleihen(int artn, int knr) {

        mdl = mv.getListe();
        
        for (int i = 0; i < mdl.size(); i++) {
            if (mdl.get(i).getArtikelnr() == artn) {
                if (mdl.get(i).getausgeliehen() != 0) {
                    Fehler_Ausleihe fehler = new Fehler_Ausleihe();
                    fehler.setVisible(true);
                    return mdl;
                } else {
                    mdl.get(i).setAusgeliehen(knr);
                }
            }
        }
        
        speichern();

        return mdl;
    }

    /**
     * Dursucht die Medienliste aus der Datei Medienliste.md nach dem auszuleihenden Medium und
     * ändert den Wert ausgeliehen des Mediums mittels setAusgeliehen(knr) auf 0.
     * @param artn - Artikelnummer des zurückgegebenen Mediums
     * @param knr - Kundennummer des Zurückgebenden
     * @return Aktualisierte Medienliste
     */
    public List rueckgabe(int artn, int knr) {

        mdl = mv.getListe();
        System.out.print(mdl.get(0).getausgeliehen());
        for (int i = 0; i < mdl.size(); i++) {
            if (mdl.get(i).getArtikelnr() == artn) {
                if (mdl.get(i).getausgeliehen() == 0) {
                    Fehler_Rueckgabe fehler = new Fehler_Rueckgabe();
                    fehler.setVisible(true);
                } else {
                    mdl.get(i).setAusgeliehen(0);
                }
            }
        }
        System.out.println(mdl.get(0).getausgeliehen());
        speichern();
        return mdl;
    }

    /**
     * Schreibt die Liste zurück in die Datei Medienliste.md
     */
    public void speichern() {
        FileOutputStream fos = null;
        try {
// Erzeugt einen neuen FileOutputStream auf den angegebenen Pfad
            fos = new FileOutputStream("src/Logik/Medienliste.md");
            ObjectOutputStream oos = null;
            try {
// Erzeugt einen neuen ObjectOutputStream auf den FileOutputStream
                oos = new ObjectOutputStream(fos);
// Schreibt das Object aus der Kundenliste in die Kundendatei
                oos.writeObject(mdl);
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                try {
// Wenn ObjectOutputStream noch vorhanden ist, wird dieser geschlossen
                    if (oos != null) {
                        oos.close();
                    }
                } catch (IOException ioe) {

                    ioe.printStackTrace();
                }
            }
        } catch (FileNotFoundException fnf) {
            fnf.printStackTrace();
        } finally {
            try {
// Wenn ObjectOutputStream noch vorhanden ist, wird dieser geschlossen
                if (fos != null) {
                    fos.close();
                }
            } catch (IOException ioe) {

                ioe.printStackTrace();
            }
        }
    }
}
